//题号：五、7
#include <iostream>
#include <deque>
using namespace std;
typedef struct node{
    int dest;
    struct node *link;
}node;

node NodeTable[];
void DFSsearch(node NodeTable[],int N,int start,int end){
    deque<node *> s;
    bool visited[N];
    for (int i=0; i<N; i++){
        visited[i] = false;
    }
    if (NodeTable[start].link==NULL){
        printf("NO");
        return;
    }
    s.push_back(NodeTable[start].link);
    visited[start] = true;
    visited[NodeTable[start].link->dest]=true;
    int finddest=0;
    while (!s.empty()){
        node *u = s.back();
        
        node *p=&NodeTable[u->dest];
        p=p->link;//开始找当前节点连接了那些节点
        int find=0;//表示找到了后续节点
        while (p!=NULL){
            if (!visited[p->dest]){
                visited[p->dest]=true;
                s.push_back(NodeTable[p->dest].link);
                find=1;
                break;
            }
            p=p->link;
        }
        if (find==1){
            if (p->dest==end){
                finddest=1;
                break;
            }
        }
        //没有找到后继结点，找同一层的节点
        else {
            s.pop_back();
            u=u->link;
            while (u!=NULL&&!visited[u->dest]){
                u=u->link;
                
            }
            if (u!=NULL){
                visited[u->dest]=true;
                s.push_back(u);
                if (u->dest==end){
                    finddest=1;
                    break;
                }
            }//else时已经pop了，也就是没有同一层的节点，
            //那么下一循环会回到上一层，上一层发现没有子节点
        }
        if (finddest==1){
            break;
        }
    }
    if (finddest==1){
        cout<<start;
        while (!s.empty()){
            node *u=s.front();
            s.pop_front();
            printf(" %d",u->dest);
        }
        cout<<endl;
    }else{
        printf("NO");
    }
    return;
}